Step Functions가 뭐야? Step Functions를 사용해 봤습니다
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번 안건에서 처음으로 Step Functions를 사용해 봤기 때문에 정리해보고자 합니다. 이번 블로그에서는 Step Functions가 무엇인지, 어떻게 사용하는지 정리해 봤습니다.
Step Functions란?
AWS Step Functions는 개발자가 AWS 서비스를 사용하여 분산 애플리케이션을 구축하고, IT 및 비즈니스 프로세스를 자동화하며, 데이터 및 기계 학습 파이프라인을 구축할 수 있도록 지원하는 시각적 로우 코드 워크플로 서비스
시각적으로 워크플로 설계
Step Functions에서는
- 시각적으로 워크플로 설계
- 코드로 워크플로 작성
- 샘플 프로젝트 실행
3가지 작성 방법을 선택할 수 있습니다.
먼저「시각적으로 워크플로 설계」의 경우 표준과 Express를 선택할 수 있습니다.
Express는 초당 이벤트 100,000개 이상의 속도로 AWS 컴퓨팅, 데이터베이스 및 메시징 서비스를 비용 효율적으로 오케스트레이션하는 새로운 유형의 AWS Step Functions 워크플로 유형입니다. 표준과 Express에 대한 차이점은 아래 이미지를 참고해 주세요.
「시각적으로 워크플로 설계」에서 작업에서는 여러 API를 사용할 수 있으며, 드래그로 간단하게 워크플로를 설계할 수 있습니다. ex) WAF의 로그를 설정하는 API, Cloud Trail 로그 취득
흐름에서는 Wait, Choice, Parallel, Pass, Map 등등을 선택할 수 있습니다.
- Wait은 상태 시스템이 지정된 시간 동안 계속되지 않도록 지연시킵니다.
- Choice는 상태 시스템에 논리를 추가합니다.
- Pass는 작업을 수행하지 않고 입력을 출력으로 전달합니다. Pass 상태는 상태 시스템을 생성하고 디버그할 때 유용합니다.
자세한 내용은 AWS Step Functions States를 참고해 주세요.
워크플로 설계가 끝났다면 다음과 같은 코드가 자동으로 생성 됩니다.
코드로 워크플로 작성
「시각적으로 워크플로 설계」에서는 사용할 API와 흐름을 드래그해서 워크플로우를 설계하면, 자동으로 코드로 변환되지만, 「코드로 워크플로 작성」에서는 사용자가 직접 코드를 작성해서 워크플로를 설계할 수 있습니다.
샘플 프로젝트 실행
샘플 프로젝트에서는 AWS에서 제공하는 다양한 워크플로를 선택할 수 있습니다.
샘플 프로젝트를 선택하면 미리 설계된 워크플로가 작성 되기 때문에 쉽게 워크플로를 설계할 수 있습니다.
Transitions 및 상태 머신 데이터
상태 시스템이 실행되면, 최상위에 있는 StartAt에서 참조하는 상태로 시작됩니다. 상태가 실행되면 Step Functions는 Next 혹은 End 필드를 통해 진행 상태를 결정합니다. Next의 경우 “Next” : “NextState”의 형태로 다음 상태로 넘어갈 수 있고, End의 경우 “End”: true 의 형태로 현태 상태 시스템을 종료할 수 있습니다.
상태 머신 데이터
상태 머신 데이터는 다음과 같은 양식을 사용합니다.
- 상태 머신에 초기 입력
- 상태 간 전송되는 데이터
- 상태 머신의 출력
Step Functions를 실행할 때, 다음과 같이 입력 값을 넣을 수 있습니다.
실행을 해보면, 다음과 같이 실행 입력값과 출력 값이 나옵니다. 현재 출력값이 key, value 포함해서 출력 되기 때문에 입력값을 필터링 해보도록 하겠습니다.
{ "foo": 123, "bar": ["a", "b", "c"], "car": { "cdr": true } }
예를 들어 다음과 같은 입력값이 있을 경우, foo의 값만 출력해 보겠습니다.
먼저 편집에서 입력으로 들어갑니다.
「InputPath로 입력 필터링」을 체크하고 필터링할 key값을 입력합니다. 입력 형태는 $.key 입니다.
실행을 해보면, foo의 123이 출력되는 것을 볼 수 있습니다.
이 외에도 Parameters를 사용하여 입력으로 전달되는 키-값 페어 컬렉션을 생성할 수 있습니다.
{ "comment": "Example for Parameters.", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" } }
다음과 같은 입력값이 있을 경우
"Parameters": { "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } },
Parameters를 통해서 원하는 정보를 선택해서 키-값 페어 컬렉션을 생성할 수 있습니다.
여기서 OutputPath를 통해서 출력 값을 필터링 할 수 있습니다.
자세한 내용은 Step Functions 입/출력 처리 를 참고해 주세요.